package com.atguigu.gulimall.coupon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication

/**
 * 总结
 * 一、如何使用Nacos作为配置管理中心？
 *  1.引入依赖(在common工程中引入即可，其他工程就都生效了)
 *         <dependency>
 *             <groupId>com.alibaba.cloud</groupId>
 *             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 *         </dependency>
 *  2.创建一个bootstrap.properties(固定名称，不可自定义)
 *    加入服务名和配置中心地址等相关配置，内容如下：
 *      spring:
 *         application:
 *            name: gulimall-coupon
 *         cloud:
 *            nacos:
 *             config:
 *               server-addr: 192.168.191.100:8848,192.168.191.101:8848,192.168.191.102:8848
 *  3.需要给配置中心默认添加一个叫做数据集(Data Id)的配置
 *      文件名：gulimall-coupon.properties
 *      命令规则：服务名.properties
 *  4.给"服务名.properties"添加配置内容
 *  5.如何使得动态修改配置生效，Controller中需要配合两个注解：
 *       @RefreshScope:动态获取并配置刷新
 *       @Value("${配置项的名}")：获取到配置。
 *  注：★如果配置中心和当前应用的配置文件中都配置了相同的项，那么优先使用配置中心的配置★
 *
 *  二、细节描述
 *    1.命名空间：作用是做配置隔离。 默认：public(保留空间)，默认新增的所有配置都在public空间下。
 *    (1) 开发、测试、生产不同环境下，利用命名空间来做环境隔离。
 *    注意：在bootstrap.properties配置上，需要使用哪个命名空间下的配置，不是直接写命名空间的名字，
 *         而是命名空间的UUID，示例：namespace: 2453c8f2-88d4-447a-bdcf-558b288ccbb6
 *
 *    (2) 每一个微服务之间可以互相配置隔离，每一个微服务都创建自己的命名空间，只加载自己命名空间下的所有配置
 *
 *    2.配置集：一组相关或者不相关的配置项的集合称为配置集。在系统中，一个配置文件通常就是一个配置集，
 *      包含了系统各个方面的配置。例如，一个配置集可能包含了数据源、线程池、日志级别等配置项。
 *
 *    3.配置集ID:类似于配置文件名 (Data Id:配置文件名)
 *
 *    4.配置分组:所有的配置集都属于：DEFAULT_GROUP ,创建配置的时候可以自定义分组名。
 *      真实项目中，每个微服务创建自己的命名空间，使用配置分组来区分不同的环境dev,test,prod
 *
 *    5.同时加载多个配置集
 *     (1)微服务任何配置信息，任何配置文件都可以放在配置中心管理
 *     (2)只需要在bootstrap.properties中说明加载配置中心哪些配置文件即可
 *     (3)@Value,@ConfigurationProperties等相关SpringBoot的获取配置的注解，都可以使用
 *     (4)配置中心的优先级最高，配置中心有的化优先加载配置中心的内容。
 *
 *
 * */
public class GulimallCouponApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallCouponApplication.class, args);
    }

}
